import axios, { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from '@ohos/axios'
import { ConfigurationConstant } from '@kit.AbilityKit'

// 创建 axios 实例，方便统一配置请求相关的公共信息
const request = axios.create({
  baseURL: 'http://10.218.24.3:6060/',
  timeout: 20000 // 请求超时时间(单位：毫秒)，超过时间会自动中断求情
})

// 请求拦截器
request.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 未来需要添加请求头 token
    return config;
  }
)

// 响应拦截器
request.interceptors.response.use(
  (response:AxiosResponse) => {
    // 后端返回的code为200，则返回data，否则返回错误信息
    // 后端接口返回的数据结构为：{code:200,data:{},message:"success"}
    if (response.data.code === 200){
      return response.data.data;
    }else{
      // 其他code 表示失败，抛出错误信息
      return Promise.reject(response.data.message)
    }
  },
  // 如果请求本身失败（比如：断网、超时、500），会进入此方法
  // 可以统一处理错误信息
  (error:AxiosError) => {
    return Promise.reject(error.message)
  }
)

// 定义一个Http工具类
export default class Http {
  // Get 请求:常用于获取数据，例如查询列表、详情、搜索内容
   get<T>(url: string, params?: Object) {
    return request.get<null,T>(url, { params })
  }

  // Post 请求:常用于创建数据，例如添加、修改、上传文件
   post<T>(url: string, data?: Object) {
    return request.post<null,T>(url, data)
  }

  // Delete 请求:常用于删除数据，例如删除、禁用、删除文件
   delete<T>(url: string, params?: Object) {
    return request.delete<null,T>(url, { params })
  }

  // Put 请求:常用于更新数据，例如修改、更新、上传文件
   put<T>(url: string, data?: Object) {
    return request.put<null,T>(url, data)
  }
}